package cn.hss.thread;

/**
 * @author 作者：HeShaoShuai
 * @Email 邮箱：2569819541@qq.com
 * @Date 日期：2023/4/28 14:43
 * @Package 包名：cn.hss.thread
 * @Project 项目名：JavaSE
 * @Version 1.0
 */

public class SaleTicketDemo1 {
	public static void main(String[] args) {
		//创建资源对象
		Ticket ticket = new Ticket();
		//启动多个线程操作资源类的对象
		Thread t1 = new Thread("窗口1"){
			@Override
			public void run() {
				while(true){
					if(ticket.getTicket()==0){
						return;
					}
					//使用同步代码将调用的售票方法同步
//                    synchronized (ticket) {
//                        ticket.saleTicket();//售票
//                    }
					ticket.saleTicket();//售票
				}
			}
		};
		Thread t2 = new Thread("窗口2"){
			@Override
			public void run() {
				while(true){
					if(ticket.getTicket()==0){
						return;
					}
					//使用同步代码将调用的售票方法同步
//                    synchronized (ticket) {
//                        ticket.saleTicket();//售票
//                    }
					ticket.saleTicket();//售票
				}
			}
		};
		Thread t3 = new Thread("窗口3"){
			@Override
			public void run() {
				while(true){
					if(ticket.getTicket()==0){
						return;
					}
					//使用同步代码将调用的售票方法同步
//                    synchronized (ticket) {
//                        ticket.saleTicket();//售票
//                    }
					ticket.saleTicket();//售票
				}
			}
		};
		//启动三个线程，开始售票
		t1.start();
		t2.start();
		t3.start();
	}
}
//抽取资源
class Ticket {
	private int ticket=100;

	//卖票方法
	//给方法上添加synchronized关键字，表示该方法是同步方法
	public synchronized void saleTicket(){
		//synchronized (this) {
		if (ticket > 0) {
			System.out.println(Thread.currentThread().getName() +
					"卖出一张票，票号：" + ticket);
			//模拟出票
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			ticket--;
		} else {
			System.out.println("票已售罄！");
		}
	}
	//}
	public int getTicket(){
		return ticket;
	}
}